//导入h3
import * as h3 from 'h3-js';

//导出方法
export default {
  // 使用h3.polyfill方法根据多边形边界点坐标获取多边形内部的格网索引
  coordinatesToIndexes: function(coordinates, resolution = 13) {
    // 确保coordinates是数组
    if (!Array.isArray(coordinates)) {
      console.error('coordinates必须是数组');
      return [];
    }

    // 检查是否有足够的坐标点
    if (coordinates.length < 3) {
      console.error('至少需要3个坐标点来形成多边形');
      return [];
    }

    // 确保多边形是闭合的（首尾点相同）
    if (coordinates[0][0] !== coordinates[coordinates.length-1][0] ||
      coordinates[0][1] !== coordinates[coordinates.length-1][1]) {
      coordinates.push(coordinates[0]);
    }

    try {
      console.log("传入的坐标：", coordinates);
      const h3Indexes = h3.polygonToCells(coordinates, resolution,true);
      console.log("获取的H3索引：", h3Indexes);
      return h3Indexes;
    } catch (error) {
      console.error('使用h3.polyfill转换多边形时出错:', error);
      return [];
    }
  },
  // 使用h3.h3ToGeo方法将H3索引转换为经纬度坐标
  h3ToGeo: function(h3Index) {
    try {
      const [lat, lng] = h3.h3ToGeo(h3Index);
      return [lat, lng];
    } catch (error) {
      console.error('使用h3.h3ToGeo转换H3索引时出错:', error);
      return null;
    }
  },
  // 使用h3.h3ToGeoBoundary方法将H3索引转换为边界点坐标
  cellToBoundary(h3Index) {
    try {
      return h3.cellToBoundary(h3Index);
    } catch (error) {
      console.error('使用h3.cellToBoundary转换H3索引时出错:', error);
      return null;
    }
  },
  getCellsAttributes(h3Indexes) {
    // 使用代理地址
    fetch('/api/cells/', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        "data": {
          "h3indexes": h3Indexes
        }
      })
    }).then(response => response.json())
      .then(data => {
        // 根据data中的数据进行地图描点
        if (data.status === 'ok' && data.data && Array.isArray(data.data)) {
          // 转换坐标格式为{lng, lat}数组
          const coordinates = data.data.map(point => [point[1], point[0]]); // maptalks使用[lng, lat]格式
          // 绘制路线
          mapInstance.drawRoute('markerLayer', coordinates, '../../public/img/map/line.png');
        }
      })
      .catch(error => {
        console.error(error);
      });
  }
}
